package com.threadmethod.AtomicIntegerArray;

import java.util.concurrent.atomic.AtomicIntegerArray;

/**
 * @PackageName:com.threadmethod.AtomicIntegerArray
 * @ClassName:Test02
 * @Description: 在多线程中使用AtomicIntegerArray
 * @Author: zhangxiaoyu
 * @date 2020/12/10 18:16
 */
public class Test02 {

    //定义原子数组
    static AtomicIntegerArray atomicIntegerArray = new AtomicIntegerArray(10);

    public static void main(String[] args){

        Thread[] threads = new Thread[10];
        for (int i=0;i<threads.length;i++) {
            threads[i] = new AddThread();
        }
            //开启子线程
            for (Thread thread :threads){
                thread.start();
            }
            //在主线程中查看自增完以后原子数组中的各个元素的值，在主线程中需要在所有子线程都执行完之后再查看
            //把所有的子线程再合并到主线程中
            for(Thread thread:threads){
                try {
                    thread.join();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }

        
        System.out.println(atomicIntegerArray);
    }

    //定义一个线程类 在线程中修改原子数组
    static  class  AddThread extends Thread{
        @Override
        public void run() {
            //每个元素自增1000次
            for(int j=0; j<1000;j++) {
                for (int i = 0; i < 10; i++) {
                    atomicIntegerArray.getAndIncrement(i % atomicIntegerArray.length());
               }
            }

        }
    }
}
